import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class NM {

    //现在要完成一个大的任务：
//1，将这个大的任务分成十个小的任务进行执行：这样就会引用到多线程的使用；
// 前面以及学过了线程池的使用；这样现在将这十个小任务交给线程池进行完成即可；
//2.在每个小任务完成后都要进行记录一下任务进度条；
// 调用相关方法进行阻塞等待，直到所有的小任务完成后进行主线程的执行；

        public static void main(String[] args) throws InterruptedException {
            CountDownLatch latch=new CountDownLatch(10);
            ExecutorService executorService= Executors.newFixedThreadPool(4);
            for(int i=0;i<10;i++){
                int id=i;
                executorService.submit(()->{
                    System.out.println("子任务开始执行"+id);

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    System.out.println("子任务执行完毕"+id);
                    latch.countDown();//记录子任务的执行数量；
                });
            }
            latch.await();//等待所有的子任务执行完毕；
            System.out.println("所有的子任务执行完毕");
            executorService.shutdown();//关闭线程池；
        }
    }

